package com.zwps.biz.domain.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import cn.hutool.core.util.StrUtil;
import lombok.Getter;
import lombok.Setter;

@Configuration
@ConfigurationProperties(prefix = "application.auth")
@Setter
@Getter
public class SystemAuthConfig {

    private final String DEFAULT_PASSWORD_PUBLIC_KEY = "037d5220ae16abab6c456de4a984fe687dc87c01bdcfd875b4875e14176d8c0802";
    
    private final String DEFAULT_PASSWORD_PRIVATE_KEY = "00ea78db3d2c95c5a9782a1785ee8b63c60a6c2528dcf0c910d1396b8719167c5d";
    
    /**
     * 在未设置过期时间或者小于默认过期时间的情况下使用默认值，默认过期时间2小时
     */
    private final long DEFAULT_TOKEN_EXPIRE_TIME = 60 * 60 * 2;

    /**
     * 在未设置过期时间或者小于默认过期时间的情况下使用默认值，默认过期时间6分钟
     */
    private final long DEFAULT_CAPTCHA_EXPIRE_TIME = 60 * 6;

    /**
     * 在未设置验证码长度或者小于默认长度的情况下使用默认值，默认长度为4
     */
    private final int DEFAULT_CAPTCHA_LENGTH = 4;

    /**
     * 加密公钥
     */
    private String passwordPublicKey;
    
    /**
     * 加密私钥
     */
    private String passwordPrivateKey;
    
    /**
     * 默认密码
     */
    private String passwordDefault;

    /**
     * Token过期时间（秒）
     */
    private Long tokenExpireTime;

    /**
     * 验证码过期时间（秒）
     */
    private Long captchaExpireTime;

    /**
     * 验证码字符长度
     */
    private Integer captchaLength;

    /**
     * 限制登录的时间（秒）
     */
    private Integer maxLoginErrorRetryTime;

    /**
     * 限制登录的次数
     */
    private Integer maxLoginErrorNum;

    public String getPasswordPublicKey() {
        if (StrUtil.isEmpty(passwordPublicKey) || passwordPublicKey.length() < 16) {
            return DEFAULT_PASSWORD_PUBLIC_KEY;
        }
        return passwordPublicKey;
    }
    
    public String getPasswordPrivateKey() {
        if (StrUtil.isEmpty(passwordPrivateKey) || passwordPrivateKey.length() < 16) {
            return DEFAULT_PASSWORD_PRIVATE_KEY;
        }
        return passwordPrivateKey;
    }

    public Long getTokenExpireTime() {
        if (tokenExpireTime == null || tokenExpireTime < DEFAULT_TOKEN_EXPIRE_TIME) {
            return DEFAULT_TOKEN_EXPIRE_TIME;
        }
        return tokenExpireTime;
    }

    public Long getCaptchaExpireTime() {
        if (captchaExpireTime == null || captchaExpireTime < DEFAULT_CAPTCHA_EXPIRE_TIME) {
            return DEFAULT_CAPTCHA_EXPIRE_TIME;
        }
        return captchaExpireTime;
    }

    public Integer getCaptchaLength() {
        
        if (captchaLength == null || captchaLength < DEFAULT_CAPTCHA_LENGTH) {
            return DEFAULT_CAPTCHA_LENGTH;
        }
        return captchaLength;
    }

}
